<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>内存泄漏与溢出</title>
</head>

<body>
    <script>
        /**
         * 内存泄漏
         *  1.缺点：
                函数执行完后，函数内的局部变量没有释放，占用内存时间会变长
                容易造成内存泄漏（内存被垃圾对象占用）
            2.解决：
                能不用闭包就不用
                及时释放
            3.常见的内存泄漏：
                意外的全局变量
                没有及时清理的计时器或回调函数
                闭包
        */
        function fn1() {
            var arr = new Array[100000]
            function fn2() {
                console.log(arr.length)
            }
            return fn2
        }
        var f = fn1()
        f()
        f = null;   //让内部函数称为垃圾对象 --> 回收闭包，解决内存泄漏

        /**
         * 内存溢出
         *  1.内存溢出是一种程序运行出现的错误，当程序运行需要的内存超过了剩余的内存时，就会抛出内存溢出的错误。
            2.内存泄漏是指没有及时释放占用的内存，内存泄漏积累多了就容易导致内存溢出
        */
        var obj = {}
        for (var i = 0; i < 10000; i++) {
            obj[i] = new Array(10000000)
        }
    </script>
</body>

</html>